using System;
using System.Collections.Generic;
using System.Text;

namespace SariturIntranetLibrary.Servicos
{
    public enum TipoDeOrderBy
    {
        Todos,
        Estado_DataCriacaoDesc
    }

    public class ServicoConsulta
    {

        private Guid _id = Guid.Empty;

        private Guid _usuarioAutorId = Guid.Empty;

        private int _setorId = 0;

        private Guid _usuarioResponsavelId = Guid.Empty;

        private int _estado = 0;

        private DateTime _dataAberturaLimite = DateTime.MaxValue;

        private DateTime _dataConclusaoLimite = DateTime.MaxValue;

        [System.ComponentModel.DataObjectField(true, false)]
        public Guid Id
        {
            get
            {
                return _id;
            }
        }

        public Guid UsuarioAutorId
        {
            get
            {
                return _usuarioAutorId;
            }
            set
            {
                if (!_usuarioAutorId.Equals(value))
                {
                    _usuarioAutorId = value;
                }
            }
        }

        public DateTime DataAberturaLimite
        {
            get
            {
                return _dataAberturaLimite;
            }
            set
            {
                if (!_dataAberturaLimite.Equals(value))
                {
                    _dataAberturaLimite = value;
                }
            }
        }

        public DateTime DataConclusaoLimite
        {
            get
            {
                return _dataConclusaoLimite;
            }
            set
            {
                if (!_dataConclusaoLimite.Equals(value))
                {
                    _dataConclusaoLimite = value;
                }
            }
        }

        public int SetorId
        {
            get
            {
                return _setorId;
            }
            set
            {
                if (!_setorId.Equals(value))
                {
                    _setorId = value;
                }
            }
        }

        public Guid UsuarioResponsavelId
        {
            get
            {
                return _usuarioResponsavelId;
            }
            set
            {
                if (!_usuarioResponsavelId.Equals(value))
                {
                    _usuarioResponsavelId = value;
                }
            }
        }

        public int Estado
        {
            get
            {
                return _estado;
            }
            set
            {
                if (!_estado.Equals(value))
                {
                    _estado = value;
                }
            }
        }

        public ServicoListInfo Consultar(TipoDeOrderBy tipo)
        {
            return ServicoListInfo.GetServicoListInfo(GetQuery(tipo));
        }

        private string GetQuery(TipoDeOrderBy tipo)
        {
            string query = "Select * from ServicoVW WHERE ";

            if (_id != Guid.Empty) query += " Id = '" + _id.ToString() + "' AND ";
            if (_usuarioAutorId != Guid.Empty) query += " UsuarioAutorId = '" + _usuarioAutorId.ToString() + "' AND ";
            if (_setorId > 0) query += " SetorId = " + _setorId.ToString() + " AND ";
            if (_usuarioResponsavelId != Guid.Empty) query += " UsuarioResponsavelId = '" + _usuarioResponsavelId.ToString() + "' AND ";
            if (_estado > 0) query += " EstadoId = " + _estado.ToString() + " AND ";
            //if(!_dataAberturaLimite.Equals(DateTime.MaxValue))query+= " DataAtendimentoConclusao >= "+ 

            //Remove o ultimo AND, se existir
            if (query.Substring(query.Length - 4, 4) == "AND ")
                query = query.Remove(query.Length - 4, 4);

            //Remove o WHERE se estiver no final da string
            if (query.Substring(query.Length - 6, 6) == "WHERE ")
                query = query.Remove(query.Length - 6, 6);

            if (tipo == TipoDeOrderBy.Estado_DataCriacaoDesc)
                return query + " order by EstadoId, DataCriacao desc ";

            return query;
        }
    }
}
